home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok15.lha / Seafarers_Manual / Source / RaisePower4.mod < prev    next >
Text File  |  1993-08-15  |  1KB  |  61 lines

  1. MODULE RaisePower4;   (* Raise x to y power (y>=0) using funcion procedure *)
  2.  
  3.   (* From the book "Modula-2  A Seafarer's Manual and Shipyard Guide" *)
  4.   (* Page 114   adapted "Amiga M2Modula-2"   08 Mar 1988 *)
  5.  
  6. FROM InOut IMPORT WriteLn,
  7.                   WriteString,
  8.                   ReadCard;
  9. FROM RealInOut IMPORT WriteReal,
  10.                       ReadReal;
  11.                       
  12. VAR
  13.   z,                    (* receives result *)
  14.   x : REAL;                (* base from keyboard *)
  15.   y : CARDINAL;                (* exponent from keyboard *)
  16.   
  17. PROCEDURE Getxy(VAR base : REAL;    (* get x & y from keyboard *)
  18.                 VAR exp : CARDINAL);
  19.   BEGIN
  20.     WriteLn;
  21.     WriteString ("Enter x: ");
  22.     ReadReal (base);
  23.     WriteLn;
  24.     WriteString ("Enter y: ");
  25.     ReadCard (exp);
  26.   END Getxy;
  27.   
  28. PROCEDURE Power(t : REAL;        (* base *)
  29.                 e : CARDINAL) : REAL;    (* exponent *)
  30.   VAR
  31.     xy : REAL;
  32.   BEGIN
  33.     xy := 1.0;                (* initialize result *)
  34.     WHILE (e # 0) DO
  35.       WHILE (NOT ODD(e)) DO
  36.         t := t * t;
  37.         e := e DIV 2;
  38.       END;   (* WHILE NOT *)
  39.       xy := xy * t;
  40.       DEC (e);
  41.     END;   (* WHILE e *)
  42.     RETURN xy;                (* return result *)
  43.   END Power;
  44.    
  45. PROCEDURE DisplayAnswer(xtoy : REAL);
  46.   BEGIN
  47.     WriteLn;
  48.     WriteString ("x to y power = ");
  49.     WriteReal (xtoy,10,2);
  50.     WriteLn;
  51.   END DisplayAnswer;
  52.  
  53. BEGIN                    (* MODULE RaisePower *)
  54.   WriteLn;
  55.   WriteString ("Calculating x to y power");
  56.   Getxy(x,y);
  57.   z := Power(x,y);
  58.   DisplayAnswer(z);
  59.    
  60. END RaisePower4.
  61.